import { getEconomicsGrid } from '@/api/home'

import { useDigitalTwinStore } from '@/stores/digitalTwin'
const digitalTwinStore = useDigitalTwinStore()

const cameraParam = [554876.14875, 3386383.881719, 104995.88, -54.943035, -89.999977, 2]
const hideLayer = ['手工模型', 'cim2建筑', '苏州地形影像_Water']

export const initEconomics = async () => {
  console.log('initEconomics')
  // 1 调整相机视角
  await fdapi.camera.set(cameraParam)
  // 2 样式调整：a.打开黑暗模式  b.隐藏手工模型  c.调整地形影像的亮度
  await setStyles()
  // 3 添加图层 geojsonLayer\
  await addGeoJsonLayer()
}

// 样式调整
const setStyles = async () => {
  //样式调整：a.打开黑暗模式  b.隐藏手工模型  c.调整地形影像的亮度
  await fdapi.weather.setDarkMode(true)
  await fdapi.infoTree.hide(hideLayer.map(name => digitalTwinStore.infoTreeObj[name]))
  await fdapi.tileLayer.setStyle(digitalTwinStore.infoTreeObj['大地形影像'], null, null, null, 0.1)
  await fdapi.tileLayer.setStyle(digitalTwinStore.infoTreeObj['苏州地形影像_Terrain'], null, null, null, 0.5)
}

const addGeoJsonLayer = async () => {
  const { data } = await getEconomicsGrid()

  //添加前先清除保证id唯一
  fdapi.geoJSONLayer.clear()

  //分类渲染器 按区间值范围进行分类符号化
  const less25 = {
    color: [255 / 255, 0 / 255, 0 / 255, 1]
  }

  const less50 = {
    color: [193 / 255, 235 / 255, 233 / 255, 1]
  }

  const less75 = {
    color: [51 / 255, 128 / 255, 174 / 255, 1]
  }

  const less100 = {
    color: [239 / 255, 237 / 255, 234 / 255, 1]
  }

  //分类渲染器
  let classBreaksRenderer = {
    rendererType: RendererType.ClassBreaksRenderer,
    //按属性取值分类着色
    field: 'Height',
    //属性字段类型
    fieldType: FieldType.Number,
    //控制可视化显示的类型：颜色
    type: VisualType.Color,
    //开启颜色范围插值
    gradient: false,
    //材质样式
    style: 16,
    //默认符号化配置
    defaultSymbol: {
      //符号化类型枚举：0 simple-marker圆形点填充  1 simple-line线填充  2 simple-fill面填充 3 polygon3d填充
      symbolType: 2,
      //填充色
      color: [1, 1, 0, 1],
      //轮廓线
      outline: {
        //线宽
        width: 1,
        //颜色
        color: [0.1, 0.1, 0.1, 1]
      }
    },
    //按field高度属性拉高面
    visualVariables: [
      {
        //控制可视化显示的类型：高度
        type: VisualType.Height,
        //属性字段名称
        field: 'Height',
        //属性字段类型
        fieldType: FieldType.Number
      }
    ],
    // rgb(131,230,255)
    // rgb(154,245,146)
    // rgb(252,225,72)
    // rgb(255,113,47)
    // rgb(250, 49, 49)
    //根据BLDG_HEIGH字段的不同区间值使用不同的符号化配置颜色
    classBreakInfos: [
      {
        minValue: 0,
        maxValue: 500,
        symbol: {
          color: [131 / 255, 230 / 255, 255 / 255, 0.2]
        }
      },
      {
        minValue: 500,
        maxValue: 1000,
        symbol: {
          color: [154 / 255, 245 / 255, 146 / 255, 0.4]
        }
      },
      {
        minValue: 1000,
        maxValue: 2000,
        symbol: {
          color: [252 / 255, 225 / 255, 72 / 255, 0.6]
        }
      },
      {
        minValue: 2000,
        maxValue: 5000,
        visible: true,
        symbol: {
          color: [255 / 255, 113 / 255, 47 / 255, 0.8]
        }
      },
      {
        minValue: 5000,
        maxValue: 10000,
        symbol: {
          color: [250 / 255, 49 / 255, 49 / 255, 1]
        }
      }
    ]
  }

  //用分类渲染器添加GeoJSONLayer
  fdapi.geoJSONLayer.add({
    id: 'economics_geojson',
    visible: true, //加载后是否显示
    rotation: [0, 0, 0], //图层旋转
    offset: [0, 0, 10], //基于原始位置的偏移量
    needProject: false, //开启投影转换
    onTerrain: false, //是否贴地
    collision: true, //开启碰撞
    sourceJson: data,
    renderer: classBreaksRenderer
  })
}

export const exitEconomics = async () => {
  console.log('exitEconomics')
  await fdapi.weather.setDarkMode(false)
  await fdapi.infoTree.show(hideLayer.map(name => digitalTwinStore.infoTreeObj[name]))
  await fdapi.tileLayer.setStyle(digitalTwinStore.infoTreeObj['大地形影像'], null, null, null, 0.3)
  await fdapi.tileLayer.setStyle(digitalTwinStore.infoTreeObj['苏州地形影像_Terrain'], null, null, null, 1)

  await fdapi.geoJSONLayer.delete('economics_geojson')
}
